﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; using Montana.Entidades;

namespace Montana
{
    public partial class frmLocalidad : Form
    {
        bool modificando = false;
        string nombreOriginal = "";
        int idActual;

        public frmLocalidad()
        {
            InitializeComponent();
        }

        private void frmLocalidad_Load(object sender, EventArgs e)
        {
            CrearColumnas();

            Provincia p = new Provincia();
            p.CargarCombo(cboProvincia, true);
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (!Validar())
                return;

            Localidad o = new Localidad();
            ArmarObjeto(o);

            if (modificando)
                o.Modificar();
            else
                o.Nuevo();
            
            modificando = false;
            this.Tag = null;

            Limpiar();

            txtNombre.Focus();

            System.Threading.Thread.Sleep(500);

            cboProvincia_SelectedIndexChanged(this, null);
        }

        private void ArmarObjeto(Localidad o)
        {
            o.ID = idActual;

            o.Nombre = txtNombre.Text;
            o.CP = txtCP.Text;
            o.IDProvincia = Validacion.GetValue(cboProvincia);
        }

        private bool Validar()
        {
            if (Validacion.EstaVacio(cboProvincia, "Debe seleccionar la provincia"))
                return false;

            if (Validacion.EstaVacio(txtNombre, "Debe ingresar la localidad"))
                return false;

            Localidad l = new Localidad();
            if (l.Existe(txtNombre.Text, Validacion.GetValue(cboProvincia)))
            {
                Validacion.MostrarError(txtNombre, "La localidad ingresada ya fue cargada");
                return false;
            }

            if (Validacion.EstaVacio(txtCP, "Debe ingresar el C.P."))
                return false;

            return true;
        }

        private void CrearColumnas()
        {
            lswLista.Columns.Add("Localidad", 300);
            lswLista.Columns.Add("CP", 90);
        }

        private void CargarLista()
        {
            Localidad o = new Localidad();
            List<Localidad> items;

            if (txtBuscar.Text.Trim() == "")
                items = o.TraerTodos();
            else
                items = o.Buscar(txtBuscar.Text);

            CargarLista(items);
        }

        private void CargarLista(List<Localidad> items)
        {
            lswLista.Items.Clear();
            foreach (Localidad item in items)
            {
                lswLista.Items.Add(item.Nombre);
                lswLista.Items[lswLista.Items.Count - 1].Tag = item;

                lswLista.Items[lswLista.Items.Count - 1].SubItems.Add(item.CP);
            }
        }

        private void frmProducto_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Escape:
                    btnCerrar_Click(this, null);
                    break;
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnBorrar_Click(object sender, EventArgs e)
        {
            if (lswLista.SelectedItems.Count == 0)
                return;

            DialogResult res = Validacion.MostrarMensaje("¿Borrar la localidad \"" + txtNombre.Text + "\"?", TipoMensaje.Pregunta);

            if (res == DialogResult.No)
                return;

            Producto o = new Producto();
            o = (Producto)this.Tag;
            o.Borrar(o.ID);

            Limpiar();

            CargarLista();

            txtNombre.Focus();
        }

        private void Limpiar()
        {
            txtNombre.Text = "";
            txtCP.Text = "";
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Limpiar();

            modificando = false;

            txtNombre.Focus();
        }

        private void lswLista_Click(object sender, EventArgs e)
        {
            if (lswLista.SelectedItems.Count == 0)
                return;

            Localidad o = (Localidad)lswLista.SelectedItems[0].Tag;
            this.Tag = o;

            Limpiar();

            modificando = true;

            idActual = o.ID;
            nombreOriginal = o.Nombre;

            txtNombre.Text = o.Nombre;
            txtCP.Text = o.CP;
        }

        private void txtBuscar_TextChanged(object sender, EventArgs e)
        {
            Localidad l = new Localidad();

            List<Localidad> col = l.Buscar(txtBuscar.Text, Validacion.GetValue(cboProvincia));

            CargarLista(col);
        }

        private void lswLista_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Delete:
                    btnBorrar_Click(this, null);
                    break;
            }
        }

        private void cboProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            Localidad l = new Localidad();
            
            CargarLista(l.BuscarObjetosPorProvincia(Validacion.GetValue(cboProvincia)));
        }

    }    
}
